package com.insight.common.enums;

import lombok.Getter;

/**
 * 导出状态枚举
 * 表示数据字典导出任务的执行状态
 *
 * @author Insight Team
 */
@Getter
public enum ExportStatus {

    /**
     * 导出成功完成
     * 文件已生成并可供下载
     */
    SUCCESS("成功", "导出任务已完成，文件可供下载"),

    /**
     * 导出失败
     * 任务执行过程中遇到错误
     */
    FAILED("失败", "导出任务执行失败"),

    /**
     * 文件已过期
     * 已超过文件保留期限
     */
    EXPIRED("已过期", "文件已超过保留期限");

    /**
     * 状态显示名称（中文）
     */
    private final String displayName;

    /**
     * 状态描述
     */
    private final String description;

    ExportStatus(String displayName, String description) {
        this.displayName = displayName;
        this.description = description;
    }

    /**
     * 根据名称获取导出状态
     *
     * @param name 状态名称
     * @return 导出状态枚举
     * @throws IllegalArgumentException 如果名称不匹配任何状态
     */
    public static ExportStatus fromName(String name) {
        for (ExportStatus status : values()) {
            if (status.name().equalsIgnoreCase(name) || status.displayName.equalsIgnoreCase(name)) {
                return status;
            }
        }
        throw new IllegalArgumentException("Unknown export status: " + name);
    }

    /**
     * 判断是否为成功状态
     *
     * @return true 如果状态为 SUCCESS
     */
    public boolean isSuccess() {
        return this == SUCCESS;
    }

    /**
     * 判断是否为失败状态
     *
     * @return true 如果状态为 FAILED
     */
    public boolean isFailed() {
        return this == FAILED;
    }

    /**
     * 判断是否为过期状态
     *
     * @return true 如果状态为 EXPIRED
     */
    public boolean isExpired() {
        return this == EXPIRED;
    }

    /**
     * 判断文件是否可下载
     *
     * @return true 如果状态为 SUCCESS（未过期）
     */
    public boolean isDownloadable() {
        return this == SUCCESS;
    }
}
